package dialogs;

import java.util.ArrayList;

import persistance.Persistencia;

import com.globapp.findandkeep.R;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;

/*
 * muestra un dialogo con lista de opcion multiple,
 * para poder seleccionar que dispositivos seran monitoreados
 * por el metodo guardian
 * 
 */
public class DispositivosGuardianDialog extends DialogFragment {
	// tags para guardar el estado
	final static String LISTA_DISPOSITIVOS = "dispositivos";

	/* Interface para comunicar con la activiy que habre el dialogo */
	public interface GuardianDialogListener {
		public void onOkButtonPressed(ArrayList<Integer> listaId);

		public void onDialogDismissed();

	}

	// Use this instance of the interface to deliver action events
	GuardianDialogListener mListener;
	// guarda los id de los dispositivos seleccionados en la preferencias
	public ArrayList<Integer> mSelectedItems;

	public String[] listaDispositivos;
	public boolean[] listaChekeados; // se pasa como parametro para decir cuales
										// estan chekea

	@Override
	public Dialog onCreateDialog(Bundle savedInstanceState) {
		if (savedInstanceState != null) {
			// si guarde el estado, recupero la lista
			listaDispositivos = savedInstanceState
					.getStringArray(LISTA_DISPOSITIVOS);
		}
		setearVariables();
		// Use the Builder class for convenient dialog construction
		AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
		builder.setTitle(R.string.s_dialog_title_dispositivos_a_monitorear);
		if (listaDispositivos != null && listaDispositivos.length > 0) {
			// si se cumple la condicion, quiere decir que se encontraron redes

			builder.setMultiChoiceItems(listaDispositivos, listaChekeados,
					new DialogInterface.OnMultiChoiceClickListener() {
						@Override
						public void onClick(DialogInterface dialog, int which,
								boolean isChecked) {
							if (isChecked) {
								// If the user checked the item, add it to the
								// selected items
								mSelectedItems.add(which + 1);// el mas uno va
																// por el
																// defaasaje
																// entre indices
																// reales y los
																// del vector
							} else if (mSelectedItems.contains(which)) {
								// Else, if the item is already in the array,
								// remove it
								mSelectedItems.remove(Integer.valueOf(which));
							}
						}
					});
			builder.setPositiveButton(android.R.string.ok,
					new DialogInterface.OnClickListener() {
						@Override
						public void onClick(DialogInterface dialog, int id) {
							mListener.onOkButtonPressed(mSelectedItems);

						}
					});

		} else {
			// no se encontraron redes, armo un dialogo diferente
			builder.setMessage(R.string.s_dialog_message_sin_dispositivos);

		}

		builder.setNegativeButton(android.R.string.cancel,
				new DialogInterface.OnClickListener() {
					@Override
					public void onClick(DialogInterface dialog, int id) {
						dismiss();
					}
				});
		// Create the AlertDialog object and return it
		return builder.create();
	}

	// Override the Fragment.onAttach() method to instantiate the
	// NoticeDialogListener
	public void onAttach(Activity activity) {
		super.onAttach(activity);
		// Verify that the host activity implements the callback interface
		try {
			// Instantiate the NoticeDialogListener so we can send events to the
			// host
			mListener = (GuardianDialogListener) activity;
		} catch (ClassCastException e) {
			// The activity doesn't implement the interface, throw exception
			throw new ClassCastException(activity.toString()
					+ " must implement GuardianDialogListener");
		}
	}

	public void onDismiss(DialogInterface dialogInterface) {
		super.onDismiss(dialogInterface);
		mListener.onDialogDismissed();
	}

	/**
	 * seteo las variable snecesaros, se saca afuera para emprolijar codigo
	 */
	public void setearVariables() {
		Persistencia per = new Persistencia(this.getActivity()
				.getApplicationContext());
		listaChekeados = new boolean[listaDispositivos.length];
		mSelectedItems = per.getRegistradasGuardianArray();
		if (mSelectedItems != null) {
			// no es null, tenia dipositivos guardados, cargo el vector de
			// boolean
			for (Integer in : mSelectedItems) {
				listaChekeados[in] = true;// denuevo menso uno peor el defasaje
			}
		} else {
			// no tenia nada guardado lo inicializo
			mSelectedItems = new ArrayList<Integer>();
		}
	}

	public void onSaveInstanceState(Bundle outState) {
		// guardamos las listas
		super.onSaveInstanceState(outState);
		outState.putStringArray(LISTA_DISPOSITIVOS, listaDispositivos);

	}

}
